const path = require('path');
const databaseModels = require('../moduels/database').getDatabase()
const userModel = databaseModels['UserModel'];
var logger = require('../moduels/logger').logger();
var Password = require("node-php-password");
/**
 * 获取所有管理员
 * @param {[type]} conditions 查询条件
 * 查询条件统一规范
 * 
 * conditions
	{
		"query" : 关键词查询,
		"pagenum" : 页数,
		"pagesize" : 每页长度
	}
 * @param {Function} cb 回调函数
 */
module.exports.getAllUsers = (conditions, cb) => {
	if (!conditions.pagenum) return cb("pagenum 参数不合法");
	if (!conditions.pagesize) return cb("pagesize 参数不合法");
	userModel.count(conditions, async (err, count) => {
		if (err) {
			console.log(err);
			return;
		}
		key = conditions["query"];
		console.log(key)
		pagenum = parseInt(conditions["pagenum"]);
		pagesize = parseInt(conditions["pagesize"]);

		pageCount = Math.ceil(count / pagesize);
		offset = (pagenum - 1) * pagesize;
		if (offset >= count) {
			offset = count;
		}
		limit = pagesize;
		var users = [];
		if (key != '') {
			users = await userModel.find(key).skip(offset).limit(pagesize);
		} else {
			users = await userModel.find().skip(offset).limit(pagesize);
		}

		// let users = await userModel.find(key).skip(offset).limit(pagesize)
		var retUsers = [];
		users.forEach(user => {
			var role_name = user.role_name;
			if (!user.role_id) {
				role_name = "超级管理员"
			}
			retUsers.push({
				"id": user.mg_id,
				"role_name": role_name,
				"username": user.mg_name,
				"create_time": user.mg_time,
				"mobile": user.mg_mobile,
				"email": user.mg_email,
				"mg_state": user.mg_state == 1
			});
		});
		var resultDta = {};
		resultDta["total"] = count;
		resultDta["pagenum"] = pagenum;
		resultDta["users"] = retUsers;
		cb(err, resultDta);
	})
}

/**
 * 创建管理员
 * 
 * @param  {[type]}   user 用户数据集
 * @param  {Function} cb   回调函数
 */
module.exports.createUser = function (params, cb) {
	userModel.exists({ mg_name: params.username }, function (err, isExists) {
		if (err) return cb(err);

		if (isExists) {
			return cb("用户名已存在");
		}
		userModel.create({
			"mg_name": params.username,
			"mg_pwd": Password.hash(params.password),
			"mg_mobile": params.mobile,
			"mg_email": params.email,
			"mg_time": (Date.parse(new Date()) / 1000),
			"role_id": params.rid
		}, function (err, user) {
			if (err) return cb("创建失败");
			result = {
				"id": user.mg_id,
				"username": user.mg_name,
				"mobile": user.mg_mobile,
				"email": user.mg_email,
				"role_id": user.role_id,
				"create_time": user.mg_time
			};
			cb(null, result);
		});
	})
}

/**
 * 更新管理员信息
 * 
 * @param  {[type]}   params 管理员信息
 * @param  {Function} cb     回调函数
 */
module.exports.updateUser = function (params, cb) {
	userModel.findByIdAndUpdate(
		params.id,
		{
			"mg_mobile": params.mobile,
			"mg_email": params.email
		},
		{ new: true },
		function (err, user) {
			if (err) return cb(err);
			cb(null, {
				"id": user.mg_id,
				"username": user.mg_name,
				"role_id": user.role_id,
				"mobile": user.mg_mobile,
				"email": user.mg_email
			});
		}
	)
}

/**
 * 通过用户 ID 获取管理员信息
 * 
 * @param  {[type]}   id 管理员 ID
 * @param  {Function} cb 回调函数
 */
module.exports.getUser = function (id, cb) {
	userModel.findById(id, function (err, user) {
		if (err) return cb(err);
		if (!user) return cb("该管理员不存在");
		cb(
			null,
			{
				"id": user.mg_id,
				"rid": user.role_id,
				"username": user.mg_name,
				"mobile": user.mg_mobile,
				"email": user.mg_email
			}
		);
	});
}

/**
 * 通过用户 ID 进行删除操作
 * 
 * @param  {[type]}   id 管理员ID
 * @param  {Function} cb 回调函数
 */
module.exports.deleteUser = function (id, cb) {
	userModel.findByIdAndRemove(id, function (err) {
		if (err) return cb("删除失败");
		cb(null);
	});
}

/**
 * 为管理员设置角色
 * 
 * @param {[type]}   id  管理员ID
 * @param {[type]}   rid 角色ID
 * @param {Function} cb  回调函数
 */
module.exports.setRole = function (id, rid, cb) {
	userModel.findById(id, function (err, user) {
		if (err || !user) cb("管理员ID不存在");

		userModel.findByIdAndUpdate(user.mg_id, { "role_id": rid }, { new: true }, function (err, user) {
			if (err) return cb("设置失败");
			cb(null, {
				"id": user.mg_id,
				"rid": user.role_id,
				"username": user.mg_name,
				"mobile": user.mg_mobile,
				"email": user.mg_email,
			});
		});

	})
}

/**
 * 设置用户状态
 * @param {[type]} id 用户id
 * @param {[type]} state 状态
 * @param {function} cb 回调函数
 */
module.exports.updateUserState = function (id, state, cb) {
	userModel.findById(id, function (err, user) {
		if (err || !user) cb("管理员ID不存在");

		userModel.findByIdAndUpdate(user.mg_id, { "mg_state": state }, { new: true }, function (err, user) {
			if (err) return cb("设置失败");
			cb(null, {
				"id": user.mg_id,
				"rid": user.role_id,
				"username": user.mg_name,
				"mobile": user.mg_mobile,
				"email": user.mg_email,
				"mg_state": user.mg_state ? 1 : 0
			});
		});

	})
}

/**
 * 管理员登录
 * @param  {[type]}   username 用户名
 * @param  {[type]}   password 密码
 * @param  {Function} cb       回调
 */
module.exports.login = function (username, password, cb) {
	logger.debug('login => username:%s,password:%s', username, password);
	logger.debug(username);
	userModel.findOne({ "mg_name": username }, function (err, user) {
		logger.debug(err);
		if (err || !user) return cb("用户名不存在");
		if (user.role_id < 0) {
			return cb("该用户没有权限登录");
		}

		if (user.role_id != 0 && user.mg_state != 1) {
			return cb("该用户已经被禁用");
		}

		if (Password.verify(password, user.mg_pwd)) {
			cb(
				null,
				{
					"id": user.mg_id,
					"rid": user.role_id,
					"username": user.mg_name,
					"mobile": user.mg_mobile,
					"email": user.mg_email,
				}
			);
		} else {
			return cb("密码错误");
		}
	});
}
